【C++】动态内存分配详解(new/new[]和delete/delete[]) | 您所在的位置:网站首页 › new delete › 【C++】动态内存分配详解(new/new[]和delete/delete[]) |
一、为什么需要动态内存分配? 在C++程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的。 但是可能存在程序的内存需求只能在运行时确定的情况。 例如,当需要的内存取决于用户输入。 在这些情况下,程序需要动态分配内存,C ++语言将运算符new和delete合成在一起。 (1)特点 1.C++中通过new关键字进行动态内存申请2.C++中的动态内存分配是基于类型进行的3.delete关键字用于内存释放(2)语法 ①变量申请: Type* pointer = new Type; //... delete pointer;表达式用于分配内存以包含一个类型类型的单个元素。 ②数组申请: Type* pointer = new Type[N]; //... delete[] pointer;表示用于分配类型类型的元素的块(数组),其中N是表示这些元素的量的整数值。 Example: int * foo; foo = new int [5];在这种情况下,系统为int类型的五个元素动态分配空间,并返回指向序列的第一个元素的指针,该指针被分配给foo(指针)。 因此,foo现在指向一个有效的内存块,其中包含五个int类型元素的空间。 这里,foo是一个指针,因此,foo指向的第一个元素可以使用表达式foo [0]或表达式* foo(两者都是等价的)来访问。可以使用foo [1]或*(foo + 1)访问第二个元素,依此类推...... Note: 我们程序请求的动态内存由系统从内存堆中分配。 但是,计算机内存是一种有限的资源,它可能会耗尽。 因此,无法保证所有使用operator new分配内存的请求都将由系统授予。 (3)动态内存分配Example: #include int main() { int* p = new int; *p = 5; *p = *p + 10; printf("p = %p\n", p); printf("*p = %d\n", *p); delete p; p = new int[10]; for(int i=0; i i; p= new (nothrow) int[i]; if (p == nullptr) cout |
CopyRight 2018-2019 实验室设备网 版权所有 |